[INFO] cloning repository https://github.com/subanesh-swe/chola
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/subanesh-swe/chola" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fsubanesh-swe%2Fchola", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fsubanesh-swe%2Fchola'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] c8df4c70f1c84af51216d1b9b3bfc7dffd28d6d2
[INFO] testing subanesh-swe/chola against master#1f7f8ea0721a3b1eb73e6c6d25cccb371434b320 for pr-154065-1
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fsubanesh-swe%2Fchola" "/workspace/builds/worker-6-tc1/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-6-tc1/source'...
[INFO] [stderr] done.
[INFO] removed /workspace/builds/worker-6-tc1/source/rust-toolchain.toml
[INFO] started tweaking git repo https://github.com/subanesh-swe/chola
[INFO] finished tweaking git repo https://github.com/subanesh-swe/chola
[INFO] tweaked toml for git repo https://github.com/subanesh-swe/chola written to /workspace/builds/worker-6-tc1/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/subanesh-swe/chola on toolchain 1f7f8ea0721a3b1eb73e6c6d25cccb371434b320
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1f7f8ea0721a3b1eb73e6c6d25cccb371434b320" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/subanesh-swe/chola already has a lockfile, it will not be regenerated
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1f7f8ea0721a3b1eb73e6c6d25cccb371434b320" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]     Updating crates.io index
[INFO] [stderr]  Downloading crates ...
[INFO] [stderr]   Downloaded deadpool-runtime v0.1.4
[INFO] [stderr]   Downloaded libredox v0.1.12
[INFO] [stderr]   Downloaded getrandom v0.4.1
[INFO] [stderr]   Downloaded deadpool-redis v0.18.0
[INFO] [stderr]   Downloaded sqlx-macros-core v0.8.6
[INFO] [stderr]   Downloaded base64ct v1.8.3
[INFO] [stderr]   Downloaded deadpool v0.12.3
[INFO] [stderr]   Downloaded sqlx-mysql v0.8.6
[INFO] [stderr]   Downloaded arc-swap v1.8.2
[INFO] [stderr]   Downloaded futures-intrusive v0.5.0
[INFO] [stderr]   Downloaded sqlx-core v0.8.6
[INFO] [stderr]   Downloaded num-bigint-dig v0.8.6
[INFO] [stderr]   Downloaded sqlx-postgres v0.8.6
[INFO] [stderr]   Downloaded unicode-normalization v0.1.25
[INFO] [stderr]   Downloaded sqlx-sqlite v0.8.6
[INFO] [stderr]   Downloaded sqlx v0.8.6
[INFO] [stderr]   Downloaded zerocopy-derive v0.8.39
[INFO] [stderr]   Downloaded rsa v0.9.10
[INFO] [stderr]   Downloaded chrono v0.4.43
[INFO] [stderr]   Downloaded redis v0.27.6
[INFO] [stderr]   Downloaded zerocopy v0.8.39
[INFO] [stderr]   Downloaded regex-syntax v0.8.9
[INFO] [stderr]   Downloaded unicode-bidi v0.3.18
[INFO] [stderr]   Downloaded tempfile v3.25.0
[INFO] [stderr]   Downloaded backon v1.6.0
[INFO] [stderr]   Downloaded pkcs1 v0.7.5
[INFO] [stderr]   Downloaded unicode-properties v0.1.4
[INFO] [stderr]   Downloaded redox_syscall v0.7.1
[INFO] [stderr]   Downloaded dotenvy v0.15.7
[INFO] [stderr]   Downloaded stringprep v0.1.5
[INFO] [stderr]   Downloaded hashlink v0.10.0
[INFO] [stderr]   Downloaded tokio-stream v0.1.18
[INFO] [stderr]   Downloaded sqlx-macros v0.8.6
[INFO] [stderr]   Downloaded etcetera v0.8.0
[INFO] [stderr]   Downloaded atoi v2.0.0
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+1f7f8ea0721a3b1eb73e6c6d25cccb371434b320" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] 9144a5b24df1501f5cb5188291f9c2ae248688b27f6b6885b72f59d1950a5f3b
[INFO] running `Command { std: "docker" "start" "-a" "9144a5b24df1501f5cb5188291f9c2ae248688b27f6b6885b72f59d1950a5f3b", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "9144a5b24df1501f5cb5188291f9c2ae248688b27f6b6885b72f59d1950a5f3b", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "9144a5b24df1501f5cb5188291f9c2ae248688b27f6b6885b72f59d1950a5f3b", kill_on_drop: false }`
[INFO] [stdout] 9144a5b24df1501f5cb5188291f9c2ae248688b27f6b6885b72f59d1950a5f3b
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+1f7f8ea0721a3b1eb73e6c6d25cccb371434b320" "build" "--frozen" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 6df45e25d4a492f3d33fdd3b31b0e9d18ea1b0805c8468295f501e47d27d1282
[INFO] running `Command { std: "docker" "start" "-a" "6df45e25d4a492f3d33fdd3b31b0e9d18ea1b0805c8468295f501e47d27d1282", kill_on_drop: false }`
[INFO] [stderr]    Compiling proc-macro2 v1.0.106
[INFO] [stderr]    Compiling unicode-ident v1.0.24
[INFO] [stderr]    Compiling quote v1.0.44
[INFO] [stderr]    Compiling serde v1.0.228
[INFO] [stderr]    Compiling libc v0.2.182
[INFO] [stderr]    Compiling serde_core v1.0.228
[INFO] [stderr]    Compiling bytes v1.11.1
[INFO] [stderr]    Compiling futures-core v0.3.32
[INFO] [stderr]    Compiling memchr v2.8.0
[INFO] [stderr]    Compiling itoa v1.0.17
[INFO] [stderr]    Compiling futures-task v0.3.32
[INFO] [stderr]    Compiling futures-io v0.3.32
[INFO] [stderr]    Compiling futures-sink v0.3.32
[INFO] [stderr]    Compiling slab v0.4.12
[INFO] [stderr]    Compiling indexmap v2.13.0
[INFO] [stderr]    Compiling zerocopy v0.8.39
[INFO] [stderr]    Compiling futures-channel v0.3.32
[INFO] [stderr]    Compiling crossbeam-utils v0.8.21
[INFO] [stderr]    Compiling zmij v1.0.21
[INFO] [stderr]    Compiling anyhow v1.0.102
[INFO] [stderr]    Compiling num-traits v0.2.19
[INFO] [stderr]    Compiling getrandom v0.4.1
[INFO] [stderr]    Compiling serde_json v1.0.149
[INFO] [stderr]    Compiling crypto-common v0.1.7
[INFO] [stderr]    Compiling bitflags v2.11.0
[INFO] [stderr]    Compiling digest v0.10.7
[INFO] [stderr]    Compiling thiserror v2.0.18
[INFO] [stderr]    Compiling iana-time-zone v0.1.65
[INFO] [stderr]    Compiling allocator-api2 v0.2.21
[INFO] [stderr]    Compiling find-msvc-tools v0.1.9
[INFO] [stderr]    Compiling http v1.4.0
[INFO] [stderr]    Compiling foldhash v0.1.5
[INFO] [stderr]    Compiling concurrent-queue v2.5.0
[INFO] [stderr]    Compiling cc v1.2.56
[INFO] [stderr]    Compiling syn v2.0.117
[INFO] [stderr]    Compiling hashbrown v0.15.5
[INFO] [stderr]    Compiling parking v2.2.1
[INFO] [stderr]    Compiling rustversion v1.0.22
[INFO] [stderr]    Compiling tinyvec_macros v0.1.1
[INFO] [stderr]    Compiling tinyvec v1.10.0
[INFO] [stderr]    Compiling event-listener v5.4.1
[INFO] [stderr]    Compiling crossbeam-queue v0.3.12
[INFO] [stderr]    Compiling zeroize v1.8.2
[INFO] [stderr]    Compiling form_urlencoded v1.2.2
[INFO] [stderr]    Compiling tracing-core v0.1.36
[INFO] [stderr]    Compiling rustls-pki-types v1.14.0
[INFO] [stderr]    Compiling regex-syntax v0.8.9
[INFO] [stderr]    Compiling unicode-normalization v0.1.25
[INFO] [stderr]    Compiling unicode-properties v0.1.4
[INFO] [stderr]    Compiling unicode-bidi v0.3.18
[INFO] [stderr]    Compiling sync_wrapper v1.0.2
[INFO] [stderr]    Compiling hashlink v0.10.0
[INFO] [stderr]    Compiling mio v1.1.1
[INFO] [stderr]    Compiling socket2 v0.6.2
[INFO] [stderr]    Compiling errno v0.3.14
[INFO] [stderr]    Compiling signal-hook-registry v1.4.8
[INFO] [stderr]    Compiling getrandom v0.2.17
[INFO] [stderr]    Compiling http-body v1.0.1
[INFO] [stderr]    Compiling rand_core v0.6.4
[INFO] [stderr]    Compiling rustix v1.1.3
[INFO] [stderr]    Compiling http-body-util v0.1.3
[INFO] [stderr]    Compiling stringprep v0.1.5
[INFO] [stderr]    Compiling chrono v0.4.43
[INFO] [stderr]    Compiling futures-util v0.3.32
[INFO] [stderr]    Compiling sha2 v0.10.9
[INFO] [stderr]    Compiling hmac v0.12.1
[INFO] [stderr]    Compiling ryu v1.0.23
[INFO] [stderr]    Compiling whoami v1.6.1
[INFO] [stderr]    Compiling uuid v1.21.0
[INFO] [stderr]    Compiling ring v0.17.14
[INFO] [stderr]    Compiling regex-automata v0.4.14
[INFO] [stderr]    Compiling dotenvy v0.15.7
[INFO] [stderr]    Compiling tokio v1.49.0
[INFO] [stderr]    Compiling hex v0.4.3
[INFO] [stderr]    Compiling byteorder v1.5.0
[INFO] [stderr]    Compiling base64 v0.22.1
[INFO] [stderr]    Compiling home v0.5.12
[INFO] [stderr]    Compiling petgraph v0.7.1
[INFO] [stderr]    Compiling hkdf v0.12.4
[INFO] [stderr]    Compiling atoi v2.0.0
[INFO] [stderr]    Compiling md-5 v0.10.6
[INFO] [stderr]    Compiling indexmap v1.9.3
[INFO] [stderr]    Compiling rustls v0.23.37
[INFO] [stderr]    Compiling socket2 v0.5.10
[INFO] [stderr]    Compiling hashbrown v0.12.3
[INFO] [stderr]    Compiling matchit v0.7.3
[INFO] [stderr]    Compiling regex v1.12.3
[INFO] [stderr]    Compiling openssl-probe v0.2.1
[INFO] [stderr]    Compiling rustls-native-certs v0.8.3
[INFO] [stderr]    Compiling rustls-pemfile v2.2.0
[INFO] [stderr]    Compiling clap_lex v1.0.0
[INFO] [stderr]    Compiling unsafe-libyaml v0.2.11
[INFO] [stderr]    Compiling num-integer v0.1.46
[INFO] [stderr]    Compiling tracing-log v0.2.0
[INFO] [stderr]    Compiling fastrand v2.3.0
[INFO] [stderr]    Compiling tempfile v3.25.0
[INFO] [stderr]    Compiling clap_builder v4.5.60
[INFO] [stderr]    Compiling backon v1.6.0
[INFO] [stderr]    Compiling serde_path_to_error v0.1.20
[INFO] [stderr]    Compiling arc-swap v1.8.2
[INFO] [stderr]    Compiling num_cpus v1.17.0
[INFO] [stderr]    Compiling num-bigint v0.4.6
[INFO] [stderr]    Compiling matchit v0.8.4
[INFO] [stderr]    Compiling sha1_smol v1.0.1
[INFO] [stderr]    Compiling ppv-lite86 v0.2.21
[INFO] [stderr]    Compiling synstructure v0.13.2
[INFO] [stderr]    Compiling prettyplease v0.2.37
[INFO] [stderr]    Compiling rand_chacha v0.3.1
[INFO] [stderr]    Compiling rand v0.8.5
[INFO] [stderr]    Compiling serde_derive v1.0.228
[INFO] [stderr]    Compiling zerofrom-derive v0.1.6
[INFO] [stderr]    Compiling yoke-derive v0.8.1
[INFO] [stderr]    Compiling zerovec-derive v0.11.2
[INFO] [stderr]    Compiling displaydoc v0.2.5
[INFO] [stderr]    Compiling tokio-macros v2.6.0
[INFO] [stderr]    Compiling tracing-attributes v0.1.31
[INFO] [stderr]    Compiling futures-macro v0.3.32
[INFO] [stderr]    Compiling thiserror-impl v2.0.18
[INFO] [stderr]    Compiling async-trait v0.1.89
[INFO] [stderr]    Compiling pin-project-internal v1.1.10
[INFO] [stderr]    Compiling async-stream-impl v0.3.6
[INFO] [stderr]    Compiling clap_derive v4.5.55
[INFO] [stderr]    Compiling async-stream v0.3.6
[INFO] [stderr]    Compiling zerofrom v0.1.6
[INFO] [stderr]    Compiling yoke v0.8.1
[INFO] [stderr]    Compiling tokio-stream v0.1.18
[INFO] [stderr]    Compiling tracing v0.1.44
[INFO] [stderr]    Compiling pin-project v1.1.10
[INFO] [stderr]    Compiling zerovec v0.11.5
[INFO] [stderr]    Compiling zerotrie v0.2.3
[INFO] [stderr]    Compiling rustls-webpki v0.103.9
[INFO] [stderr]    Compiling axum-core v0.5.6
[INFO] [stderr]    Compiling matchers v0.2.0
[INFO] [stderr]    Compiling clap v4.5.60
[INFO] [stderr]    Compiling tinystr v0.8.2
[INFO] [stderr]    Compiling potential_utf v0.1.4
[INFO] [stderr]    Compiling icu_locale_core v2.1.1
[INFO] [stderr]    Compiling icu_collections v2.1.1
[INFO] [stderr]    Compiling icu_provider v2.1.1
[INFO] [stderr]    Compiling icu_properties v2.1.2
[INFO] [stderr]    Compiling either v1.15.0
[INFO] [stderr]    Compiling smallvec v1.15.1
[INFO] [stderr]    Compiling serde_yaml v0.9.34+deprecated
[INFO] [stderr]    Compiling serde_urlencoded v0.7.1
[INFO] [stderr]    Compiling icu_normalizer v2.1.1
[INFO] [stderr]    Compiling parking_lot_core v0.9.12
[INFO] [stderr]    Compiling itertools v0.14.0
[INFO] [stderr]    Compiling parking_lot v0.12.5
[INFO] [stderr]    Compiling itertools v0.13.0
[INFO] [stderr]    Compiling tracing-subscriber v0.3.22
[INFO] [stderr]    Compiling futures-intrusive v0.5.0
[INFO] [stderr]    Compiling axum-core v0.4.5
[INFO] [stderr]    Compiling futures-executor v0.3.32
[INFO] [stderr]    Compiling futures v0.3.32
[INFO] [stderr]    Compiling idna_adapter v1.2.1
[INFO] [stderr]    Compiling idna v1.1.0
[INFO] [stderr]    Compiling url v2.5.8
[INFO] [stderr]    Compiling sqlx-core v0.8.6
[INFO] [stderr]    Compiling prost-derive v0.13.5
[INFO] [stderr]    Compiling prost v0.13.5
[INFO] [stderr]    Compiling prost-types v0.13.5
[INFO] [stderr]    Compiling sqlx-postgres v0.8.6
[INFO] [stderr]    Compiling prost-build v0.13.5
[INFO] [stderr]    Compiling tonic-build v0.12.3
[INFO] [stderr]    Compiling ci-core v0.1.0 (/opt/rustwide/workdir/crates/ci-core)
[INFO] [stderr]    Compiling tokio-util v0.7.18
[INFO] [stderr]    Compiling tower v0.5.3
[INFO] [stderr]    Compiling tokio-rustls v0.26.4
[INFO] [stderr]    Compiling deadpool-runtime v0.1.4
[INFO] [stderr]    Compiling deadpool v0.12.3
[INFO] [stderr]    Compiling h2 v0.4.13
[INFO] [stderr]    Compiling axum v0.7.9
[INFO] [stderr]    Compiling tower v0.4.13
[INFO] [stderr]    Compiling combine v4.6.7
[INFO] [stderr]    Compiling sqlx-macros-core v0.8.6
[INFO] [stderr]    Compiling sqlx-macros v0.8.6
[INFO] [stderr]    Compiling redis v0.27.6
[INFO] [stderr]    Compiling hyper v1.8.1
[INFO] [stderr]    Compiling hyper-util v0.1.20
[INFO] [stderr]    Compiling sqlx v0.8.6
[INFO] [stderr]    Compiling hyper-timeout v0.5.2
[INFO] [stderr]    Compiling axum v0.8.8
[INFO] [stderr]    Compiling tonic v0.12.3
[INFO] [stderr]    Compiling deadpool-redis v0.18.0
[INFO] [stderr]    Compiling ci-job-runner v0.1.0 (/opt/rustwide/workdir/crates/ci-job-runner)
[INFO] [stderr]    Compiling ci-controller v0.1.0 (/opt/rustwide/workdir/crates/ci-controller)
[INFO] [stderr]    Compiling ci-worker v0.1.0 (/opt/rustwide/workdir/crates/ci-worker)
[INFO] [stdout] warning: unused import: `JobStatusAck`
[INFO] [stdout]  --> crates/ci-worker/src/agent.rs:8:15
[INFO] [stdout]   |
[INFO] [stdout] 8 |     JobState, JobStatusAck, JobStatusUpdate, ReconnectRequest, RegisterRequest, RunningJobInfo,
[INFO] [stdout]   |               ^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `LogResumeDirective`
[INFO] [stdout]  --> crates/ci-worker/src/reconnect.rs:4:15
[INFO] [stdout]   |
[INFO] [stdout] 4 |     JobState, LogResumeDirective, ReconnectRequest, ReconnectResponse, RunningJobInfo,
[INFO] [stdout]   |               ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `command_exit_code` is never read
[INFO] [stdout]   --> crates/ci-worker/src/stage_runner.rs:59:42
[INFO] [stdout]    |
[INFO] [stdout] 59 |         let mut command_exit_code: i32 = -1;
[INFO] [stdout]    |                                          ^^
[INFO] [stdout]    |
[INFO] [stdout]    = help: maybe it is overwritten before being read?
[INFO] [stdout]    = note: `#[warn(unused_assignments)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `post_exit_code` is never read
[INFO] [stdout]   --> crates/ci-worker/src/stage_runner.rs:60:47
[INFO] [stdout]    |
[INFO] [stdout] 60 |         let mut post_exit_code: Option<i32> = None;
[INFO] [stdout]    |                                               ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = help: maybe it is overwritten before being read?
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `is_stderr` is never read
[INFO] [stdout]    --> crates/ci-worker/src/executor.rs:171:9
[INFO] [stdout]     |
[INFO] [stdout] 169 | pub struct LogLine {
[INFO] [stdout]     |            ------- field in this struct
[INFO] [stdout] 170 |     pub line: String,
[INFO] [stdout] 171 |     pub is_stderr: bool,
[INFO] [stdout]     |         ^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `LogLine` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout]     = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `output` is never read
[INFO] [stdout]    --> crates/ci-worker/src/executor.rs:178:9
[INFO] [stdout]     |
[INFO] [stdout] 176 | pub struct ExecutionResult {
[INFO] [stdout]     |            --------------- field in this struct
[INFO] [stdout] 177 |     pub exit_code: i32,
[INFO] [stdout] 178 |     pub output: String,
[INFO] [stdout]     |         ^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `ExecutionResult` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `pid` is never read
[INFO] [stdout]    --> crates/ci-worker/src/executor.rs:184:5
[INFO] [stdout]     |
[INFO] [stdout] 182 | pub struct RunningJob {
[INFO] [stdout]     |            ---------- field in this struct
[INFO] [stdout] 183 |     /// Process ID (negative for process group)
[INFO] [stdout] 184 |     pid: i32,
[INFO] [stdout]     |     ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `execute` is never used
[INFO] [stdout]    --> crates/ci-worker/src/executor.rs:199:18
[INFO] [stdout]     |
[INFO] [stdout] 192 | impl Executor {
[INFO] [stdout]     | ------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 199 |     pub async fn execute(&self, command: &str, work_dir: &str) -> anyhow::Result<ExecutionResult> {
[INFO] [stdout]     |                  ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `HeartbeatSender` is never constructed
[INFO] [stdout]  --> crates/ci-worker/src/heartbeat.rs:2:12
[INFO] [stdout]   |
[INFO] [stdout] 2 | pub struct HeartbeatSender;
[INFO] [stdout]   |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]  --> crates/ci-worker/src/heartbeat.rs:5:12
[INFO] [stdout]   |
[INFO] [stdout] 4 | impl HeartbeatSender {
[INFO] [stdout]   | -------------------- associated function in this implementation
[INFO] [stdout] 5 |     pub fn new() -> Self {
[INFO] [stdout]   |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `with_config` is never used
[INFO] [stdout]   --> crates/ci-worker/src/log_streamer.rs:42:12
[INFO] [stdout]    |
[INFO] [stdout] 35 | impl LogStreamer {
[INFO] [stdout]    | ---------------- associated function in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 42 |     pub fn with_config(config: LogStreamerConfig) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `job_state`, `complete_job`, and `update_job_offset` are never used
[INFO] [stdout]    --> crates/ci-worker/src/reconnect.rs:73:12
[INFO] [stdout]     |
[INFO] [stdout]  60 | impl ReconnectHandler {
[INFO] [stdout]     | --------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  73 |     pub fn job_state(&self) -> std::sync::Arc<tokio::sync::RwLock<WorkerJobState>> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  91 |     pub async fn complete_job(&self, job_id: &str) {
[INFO] [stdout]     |                  ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 101 |     pub async fn update_job_offset(&self, job_id: &str, log_offset: u64) {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `should_migrate_stage` is never used
[INFO] [stdout]    --> crates/ci-worker/src/reconnect.rs:224:8
[INFO] [stdout]     |
[INFO] [stdout] 224 | pub fn should_migrate_stage(allow_worker_migration: bool, stage_completed: bool) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> crates/ci-controller/src/job_group_registry.rs:35:12
[INFO] [stdout]     |
[INFO] [stdout]  17 | impl JobGroupRegistry {
[INFO] [stdout]     | --------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  35 |     pub fn get_mut(&mut self, group_id: &Uuid) -> Option<&mut JobGroup> {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  65 |     pub fn get_job_mut_in_group(&mut self, group_id: &Uuid, job_id: &str) -> Option<&mut Job> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  73 |     pub fn check_group_completion(&mut self, group_id: &Uuid) -> Option<JobGroupState> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 113 |     pub fn get_groups_for_worker(&self, worker_id: &str) -> Vec<&JobGroup> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 130 |     pub fn handle_worker_death(&self, worker_id: &str) -> (Vec<Uuid>, Vec<Uuid>) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 168 |     pub fn migrate_group(&mut self, group_id: &Uuid, new_worker_id: &str) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 190 |     pub fn fail_group_jobs(&mut self, group_id: &Uuid, reason: &str) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 217 |     pub fn on_group_completed(&self, group_id: &Uuid) -> Option<String> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 234 |     pub fn get_parallel_stages(&self, group_id: &Uuid) -> Vec<Vec<String>> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `get_orphaned_jobs` is never used
[INFO] [stdout]    --> crates/ci-controller/src/job_registry.rs:115:12
[INFO] [stdout]     |
[INFO] [stdout]  12 | impl JobRegistry {
[INFO] [stdout]     | ---------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 115 |     pub fn get_orphaned_jobs(&self, connection_id: &str) -> Vec<&Job> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `with_log_dir` and `new_job_state` are never used
[INFO] [stdout]   --> crates/ci-controller/src/log_aggregator.rs:54:12
[INFO] [stdout]    |
[INFO] [stdout] 45 | impl LogAggregator {
[INFO] [stdout]    | ------------------ associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 54 |     pub fn with_log_dir(log_dir: String) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 63 |     fn new_job_state(&self) -> JobLogState {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]   --> crates/ci-controller/src/monitoring.rs:45:12
[INFO] [stdout]    |
[INFO] [stdout] 27 | impl Metrics {
[INFO] [stdout]    | ------------ methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 45 |     pub fn inc_jobs_submitted(&self) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 49 |     pub fn inc_jobs_completed(&self) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 53 |     pub fn inc_jobs_failed(&self) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 57 |     pub fn inc_jobs_cancelled(&self) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 61 |     pub fn inc_stages_submitted(&self) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 65 |     pub fn inc_worker_reservations(&self) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 69 |     pub fn inc_stage_failures(&self) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 75 |     pub fn inc_active_builds(&self) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 79 |     pub fn dec_active_builds(&self) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 83 |     pub fn inc_active_stages(&self) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 87 |     pub fn dec_active_stages(&self) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Monitoring` is never constructed
[INFO] [stdout]    --> crates/ci-controller/src/monitoring.rs:150:12
[INFO] [stdout]     |
[INFO] [stdout] 150 | pub struct Monitoring;
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `record_worker_metrics`, and `job_stats` are never used
[INFO] [stdout]    --> crates/ci-controller/src/monitoring.rs:153:12
[INFO] [stdout]     |
[INFO] [stdout] 152 | impl Monitoring {
[INFO] [stdout]     | --------------- associated items in this implementation
[INFO] [stdout] 153 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 158 |     pub async fn record_worker_metrics(&self, worker_id: &str, load: f64) {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 163 |     pub async fn job_stats(&self) -> anyhow::Result<JobStats> {
[INFO] [stdout]     |                  ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `JobStats` is never constructed
[INFO] [stdout]    --> crates/ci-controller/src/monitoring.rs:174:12
[INFO] [stdout]     |
[INFO] [stdout] 174 | pub struct JobStats {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `WorkerPresence` is never constructed
[INFO] [stdout]  --> crates/ci-controller/src/redis_store.rs:9:12
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub struct WorkerPresence {
[INFO] [stdout]   |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `JobGroupCache` is never constructed
[INFO] [stdout]   --> crates/ci-controller/src/redis_store.rs:19:12
[INFO] [stdout]    |
[INFO] [stdout] 19 | pub struct JobGroupCache {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `RedisStore` is never constructed
[INFO] [stdout]   --> crates/ci-controller/src/redis_store.rs:26:12
[INFO] [stdout]    |
[INFO] [stdout] 26 | pub struct RedisStore {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> crates/ci-controller/src/redis_store.rs:32:18
[INFO] [stdout]     |
[INFO] [stdout]  31 | impl RedisStore {
[INFO] [stdout]     | --------------- associated items in this implementation
[INFO] [stdout]  32 |     pub async fn new(redis_url: &str, prefix: &str) -> anyhow::Result<Self> {
[INFO] [stdout]     |                  ^^^
[INFO] [stdout] ...
[INFO] [stdout]  47 |     async fn get_conn(&self) -> anyhow::Result<Connection> {
[INFO] [stdout]     |              ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  51 |     fn key(&self, parts: &[&str]) -> String {
[INFO] [stdout]     |        ^^^
[INFO] [stdout] ...
[INFO] [stdout]  58 |     pub async fn reserve_worker(
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  85 |     pub async fn release_worker(&self, worker_id: &str) -> anyhow::Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  94 |     pub async fn get_worker_reservation(&self, worker_id: &str) -> anyhow::Result<Option<String>> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 104 |     pub async fn update_worker_presence(
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 118 |     pub async fn get_worker_presence(
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 132 |     pub async fn remove_worker_presence(&self, worker_id: &str) -> anyhow::Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 142 |     pub async fn add_available_worker(&self, worker_id: &str) -> anyhow::Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 150 |     pub async fn remove_available_worker(&self, worker_id: &str) -> anyhow::Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 158 |     pub async fn get_available_workers(&self) -> anyhow::Result<Vec<String>> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 168 |     pub async fn update_job_group_cache(
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 181 |     pub async fn get_job_group_cache(
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 197 |     pub async fn publish_event(&self, group_id: &str, event: &str) -> anyhow::Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 207 |     pub async fn acquire_lock(&self, lock_name: &str, ttl_secs: u64) -> anyhow::Result<bool> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 222 |     pub async fn release_lock(&self, lock_name: &str) -> anyhow::Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 230 |     pub fn prefix(&self) -> &str {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_pubsub_client` is never used
[INFO] [stdout]    --> crates/ci-controller/src/redis_store.rs:239:8
[INFO] [stdout]     |
[INFO] [stdout] 239 | pub fn create_pubsub_client(redis_url: &str) -> anyhow::Result<redis::Client> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_worker_death_key` is never used
[INFO] [stdout]    --> crates/ci-controller/src/redis_store.rs:246:8
[INFO] [stdout]     |
[INFO] [stdout] 246 | pub fn parse_worker_death_key(key: &str, prefix: &str) -> Option<String> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `subscribe_worker_deaths` is never used
[INFO] [stdout]    --> crates/ci-controller/src/redis_store.rs:260:14
[INFO] [stdout]     |
[INFO] [stdout] 260 | pub async fn subscribe_worker_deaths(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ReservationManager` is never constructed
[INFO] [stdout]  --> crates/ci-controller/src/reservation.rs:7:12
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub struct ReservationManager;
[INFO] [stdout]   |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `reserve` and `release` are never used
[INFO] [stdout]   --> crates/ci-controller/src/reservation.rs:11:18
[INFO] [stdout]    |
[INFO] [stdout]  9 | impl ReservationManager {
[INFO] [stdout]    | ----------------------- associated functions in this implementation
[INFO] [stdout] 10 |     /// Attempt to reserve a worker for a job group
[INFO] [stdout] 11 |     pub async fn reserve(
[INFO] [stdout]    |                  ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 30 |     pub async fn release(redis: &RedisStore, worker_id: &str) -> anyhow::Result<()> {
[INFO] [stdout]    |                  ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `RoundRobinScheduler` is never constructed
[INFO] [stdout]    --> crates/ci-controller/src/scheduler.rs:123:12
[INFO] [stdout]     |
[INFO] [stdout] 123 | pub struct RoundRobinScheduler {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]    --> crates/ci-controller/src/scheduler.rs:128:12
[INFO] [stdout]     |
[INFO] [stdout] 127 | impl RoundRobinScheduler {
[INFO] [stdout]     | ------------------------ associated function in this implementation
[INFO] [stdout] 128 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `REPO_COLUMNS` is never used
[INFO] [stdout]   --> crates/ci-controller/src/storage.rs:14:7
[INFO] [stdout]    |
[INFO] [stdout] 14 | const REPO_COLUMNS: &str =
[INFO] [stdout]    |       ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `STAGE_CONFIG_COLUMNS` is never used
[INFO] [stdout]   --> crates/ci-controller/src/storage.rs:17:7
[INFO] [stdout]    |
[INFO] [stdout] 17 | const STAGE_CONFIG_COLUMNS: &str =
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `STAGE_SCRIPT_COLUMNS` is never used
[INFO] [stdout]   --> crates/ci-controller/src/storage.rs:22:7
[INFO] [stdout]    |
[INFO] [stdout] 22 | const STAGE_SCRIPT_COLUMNS: &str =
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `JOB_GROUP_COLUMNS` is never used
[INFO] [stdout]   --> crates/ci-controller/src/storage.rs:26:7
[INFO] [stdout]    |
[INFO] [stdout] 26 | const JOB_GROUP_COLUMNS: &str =
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `JOB_COLUMNS` is never used
[INFO] [stdout]   --> crates/ci-controller/src/storage.rs:30:7
[INFO] [stdout]    |
[INFO] [stdout] 30 | const JOB_COLUMNS: &str = "id, job_group_id, stage_config_id, stage_name, command, pre_script, \
[INFO] [stdout]    |       ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `WORKER_COLUMNS` is never used
[INFO] [stdout]   --> crates/ci-controller/src/storage.rs:34:7
[INFO] [stdout]    |
[INFO] [stdout] 34 | const WORKER_COLUMNS: &str =
[INFO] [stdout]    |       ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `RESERVATION_COLUMNS` is never used
[INFO] [stdout]   --> crates/ci-controller/src/storage.rs:38:7
[INFO] [stdout]    |
[INFO] [stdout] 38 | const RESERVATION_COLUMNS: &str =
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `map_repo` is never used
[INFO] [stdout]   --> crates/ci-controller/src/storage.rs:45:4
[INFO] [stdout]    |
[INFO] [stdout] 45 | fn map_repo(r: sqlx::postgres::PgRow) -> Repo {
[INFO] [stdout]    |    ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `map_stage_config` is never used
[INFO] [stdout]   --> crates/ci-controller/src/storage.rs:57:4
[INFO] [stdout]    |
[INFO] [stdout] 57 | fn map_stage_config(r: sqlx::postgres::PgRow) -> StageConfig {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `map_stage_script` is never used
[INFO] [stdout]   --> crates/ci-controller/src/storage.rs:76:4
[INFO] [stdout]    |
[INFO] [stdout] 76 | fn map_stage_script(r: sqlx::postgres::PgRow) -> StageScript {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `map_reservation` is never used
[INFO] [stdout]   --> crates/ci-controller/src/storage.rs:89:4
[INFO] [stdout]    |
[INFO] [stdout] 89 | fn map_reservation(r: sqlx::postgres::PgRow) -> WorkerReservation {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `map_job_group` is never used
[INFO] [stdout]    --> crates/ci-controller/src/storage.rs:101:4
[INFO] [stdout]     |
[INFO] [stdout] 101 | fn map_job_group(r: sqlx::postgres::PgRow) -> JobGroup {
[INFO] [stdout]     |    ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Storage` is never constructed
[INFO] [stdout]    --> crates/ci-controller/src/storage.rs:164:12
[INFO] [stdout]     |
[INFO] [stdout] 164 | pub struct Storage {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `WorkerRow` is never constructed
[INFO] [stdout]    --> crates/ci-controller/src/storage.rs:170:12
[INFO] [stdout]     |
[INFO] [stdout] 170 | pub struct WorkerRow {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `DbJob` is never constructed
[INFO] [stdout]    --> crates/ci-controller/src/storage.rs:186:12
[INFO] [stdout]     |
[INFO] [stdout] 186 | pub struct DbJob {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> crates/ci-controller/src/storage.rs:208:18
[INFO] [stdout]     |
[INFO] [stdout] 206 | impl Storage {
[INFO] [stdout]     | ------------ associated items in this implementation
[INFO] [stdout] 207 |     /// Create a new Storage with a connection pool
[INFO] [stdout] 208 |     pub async fn new(database_url: &str, max_connections: u32) -> anyhow::Result<Self> {
[INFO] [stdout]     |                  ^^^
[INFO] [stdout] ...
[INFO] [stdout] 219 |     pub async fn migrate(&self) -> anyhow::Result<()> {
[INFO] [stdout]     |                  ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 239 |     pub fn pool(&self) -> &PgPool {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 247 |     pub async fn get_repo_by_name(&self, repo_name: &str) -> anyhow::Result<Option<Repo>> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 257 |     pub async fn create_repo(
[INFO] [stdout]     |                  ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 278 |     pub async fn list_repos(&self) -> anyhow::Result<Vec<Repo>> {
[INFO] [stdout]     |                  ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 289 |     pub async fn get_stage_configs_for_repo(
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 302 |     pub async fn get_stage_config(&self, id: Uuid) -> anyhow::Result<Option<StageConfig>> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 315 |     pub async fn get_scripts_for_stage(
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 364 |     pub async fn create_job_group(&self, group: &JobGroup) -> anyhow::Result<JobGroup> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 387 |     pub async fn update_job_group_state(
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 412 |     pub async fn get_job_group(&self, id: Uuid) -> anyhow::Result<Option<JobGroup>> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 423 |     pub async fn create_job(&self, job: &DbJob) -> anyhow::Result<DbJob> {
[INFO] [stdout]     |                  ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 448 |     pub async fn update_job_state(
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 494 |     pub async fn get_jobs_for_group(&self, job_group_id: Uuid) -> anyhow::Result<Vec<DbJob>> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 507 |     pub async fn get_job(&self, id: Uuid) -> anyhow::Result<Option<DbJob>> {
[INFO] [stdout]     |                  ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 518 |     pub async fn create_reservation(
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 539 |     pub async fn release_reservation(
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 563 |     pub async fn get_active_reservation_for_worker(
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 584 |     pub async fn upsert_worker(&self, worker: &WorkerRow) -> anyhow::Result<WorkerRow> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 618 |     pub async fn update_worker_status(
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 637 |     pub async fn get_worker(&self, worker_id: &str) -> anyhow::Result<Option<WorkerRow>> {
[INFO] [stdout]     |                  ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 647 |     pub async fn list_workers(&self) -> anyhow::Result<Vec<WorkerRow>> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `mark_disconnected` and `is_draining` are never used
[INFO] [stdout]    --> crates/ci-controller/src/worker_registry.rs:67:12
[INFO] [stdout]     |
[INFO] [stdout]  12 | impl WorkerRegistry {
[INFO] [stdout]     | ------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  67 |     pub fn mark_disconnected(&mut self, worker_id: &str) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 102 |     pub fn is_draining(&self, worker_id: &str) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 2m 07s
[INFO] running `Command { std: "docker" "inspect" "6df45e25d4a492f3d33fdd3b31b0e9d18ea1b0805c8468295f501e47d27d1282", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "6df45e25d4a492f3d33fdd3b31b0e9d18ea1b0805c8468295f501e47d27d1282", kill_on_drop: false }`
[INFO] [stdout] 6df45e25d4a492f3d33fdd3b31b0e9d18ea1b0805c8468295f501e47d27d1282
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+1f7f8ea0721a3b1eb73e6c6d25cccb371434b320" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] bf2c9262f6a129ff9a55a1163e03878b212b1a4f583f7cbcc5bd12515f99e523
[INFO] running `Command { std: "docker" "start" "-a" "bf2c9262f6a129ff9a55a1163e03878b212b1a4f583f7cbcc5bd12515f99e523", kill_on_drop: false }`
[INFO] [stderr]    Compiling ci-core v0.1.0 (/opt/rustwide/workdir/crates/ci-core)
[INFO] [stderr]    Compiling ci-job-runner v0.1.0 (/opt/rustwide/workdir/crates/ci-job-runner)
[INFO] [stderr]    Compiling ci-worker v0.1.0 (/opt/rustwide/workdir/crates/ci-worker)
[INFO] [stderr]    Compiling ci-controller v0.1.0 (/opt/rustwide/workdir/crates/ci-controller)
[INFO] [stdout] warning: unused import: `JobStatusAck`
[INFO] [stdout]  --> crates/ci-worker/src/agent.rs:8:15
[INFO] [stdout]   |
[INFO] [stdout] 8 |     JobState, JobStatusAck, JobStatusUpdate, ReconnectRequest, RegisterRequest, RunningJobInfo,
[INFO] [stdout]   |               ^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `command_exit_code` is never read
[INFO] [stdout]   --> crates/ci-worker/src/stage_runner.rs:59:42
[INFO] [stdout]    |
[INFO] [stdout] 59 |         let mut command_exit_code: i32 = -1;
[INFO] [stdout]    |                                          ^^
[INFO] [stdout]    |
[INFO] [stdout]    = help: maybe it is overwritten before being read?
[INFO] [stdout]    = note: `#[warn(unused_assignments)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `post_exit_code` is never read
[INFO] [stdout]   --> crates/ci-worker/src/stage_runner.rs:60:47
[INFO] [stdout]    |
[INFO] [stdout] 60 |         let mut post_exit_code: Option<i32> = None;
[INFO] [stdout]    |                                               ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = help: maybe it is overwritten before being read?
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `is_stderr` is never read
[INFO] [stdout]    --> crates/ci-worker/src/executor.rs:171:9
[INFO] [stdout]     |
[INFO] [stdout] 169 | pub struct LogLine {
[INFO] [stdout]     |            ------- field in this struct
[INFO] [stdout] 170 |     pub line: String,
[INFO] [stdout] 171 |     pub is_stderr: bool,
[INFO] [stdout]     |         ^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `LogLine` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout]     = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `output` is never read
[INFO] [stdout]    --> crates/ci-worker/src/executor.rs:178:9
[INFO] [stdout]     |
[INFO] [stdout] 176 | pub struct ExecutionResult {
[INFO] [stdout]     |            --------------- field in this struct
[INFO] [stdout] 177 |     pub exit_code: i32,
[INFO] [stdout] 178 |     pub output: String,
[INFO] [stdout]     |         ^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `ExecutionResult` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `pid` is never read
[INFO] [stdout]    --> crates/ci-worker/src/executor.rs:184:5
[INFO] [stdout]     |
[INFO] [stdout] 182 | pub struct RunningJob {
[INFO] [stdout]     |            ---------- field in this struct
[INFO] [stdout] 183 |     /// Process ID (negative for process group)
[INFO] [stdout] 184 |     pid: i32,
[INFO] [stdout]     |     ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `execute` is never used
[INFO] [stdout]    --> crates/ci-worker/src/executor.rs:199:18
[INFO] [stdout]     |
[INFO] [stdout] 192 | impl Executor {
[INFO] [stdout]     | ------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 199 |     pub async fn execute(&self, command: &str, work_dir: &str) -> anyhow::Result<ExecutionResult> {
[INFO] [stdout]     |                  ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `HeartbeatSender` is never constructed
[INFO] [stdout]  --> crates/ci-worker/src/heartbeat.rs:2:12
[INFO] [stdout]   |
[INFO] [stdout] 2 | pub struct HeartbeatSender;
[INFO] [stdout]   |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]  --> crates/ci-worker/src/heartbeat.rs:5:12
[INFO] [stdout]   |
[INFO] [stdout] 4 | impl HeartbeatSender {
[INFO] [stdout]   | -------------------- associated function in this implementation
[INFO] [stdout] 5 |     pub fn new() -> Self {
[INFO] [stdout]   |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `with_config` is never used
[INFO] [stdout]   --> crates/ci-worker/src/log_streamer.rs:42:12
[INFO] [stdout]    |
[INFO] [stdout] 35 | impl LogStreamer {
[INFO] [stdout]    | ---------------- associated function in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 42 |     pub fn with_config(config: LogStreamerConfig) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `job_state` and `update_job_offset` are never used
[INFO] [stdout]    --> crates/ci-worker/src/reconnect.rs:73:12
[INFO] [stdout]     |
[INFO] [stdout]  60 | impl ReconnectHandler {
[INFO] [stdout]     | --------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  73 |     pub fn job_state(&self) -> std::sync::Arc<tokio::sync::RwLock<WorkerJobState>> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 101 |     pub async fn update_job_offset(&self, job_id: &str, log_offset: u64) {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `should_migrate_stage` is never used
[INFO] [stdout]    --> crates/ci-worker/src/reconnect.rs:224:8
[INFO] [stdout]     |
[INFO] [stdout] 224 | pub fn should_migrate_stage(allow_worker_migration: bool, stage_completed: bool) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> crates/ci-controller/src/job_group_registry.rs:35:12
[INFO] [stdout]     |
[INFO] [stdout]  17 | impl JobGroupRegistry {
[INFO] [stdout]     | --------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  35 |     pub fn get_mut(&mut self, group_id: &Uuid) -> Option<&mut JobGroup> {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  65 |     pub fn get_job_mut_in_group(&mut self, group_id: &Uuid, job_id: &str) -> Option<&mut Job> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  73 |     pub fn check_group_completion(&mut self, group_id: &Uuid) -> Option<JobGroupState> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 113 |     pub fn get_groups_for_worker(&self, worker_id: &str) -> Vec<&JobGroup> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 130 |     pub fn handle_worker_death(&self, worker_id: &str) -> (Vec<Uuid>, Vec<Uuid>) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 168 |     pub fn migrate_group(&mut self, group_id: &Uuid, new_worker_id: &str) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 190 |     pub fn fail_group_jobs(&mut self, group_id: &Uuid, reason: &str) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 217 |     pub fn on_group_completed(&self, group_id: &Uuid) -> Option<String> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 234 |     pub fn get_parallel_stages(&self, group_id: &Uuid) -> Vec<Vec<String>> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `get_orphaned_jobs` is never used
[INFO] [stdout]    --> crates/ci-controller/src/job_registry.rs:115:12
[INFO] [stdout]     |
[INFO] [stdout]  12 | impl JobRegistry {
[INFO] [stdout]     | ---------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 115 |     pub fn get_orphaned_jobs(&self, connection_id: &str) -> Vec<&Job> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `with_log_dir` and `new_job_state` are never used
[INFO] [stdout]   --> crates/ci-controller/src/log_aggregator.rs:54:12
[INFO] [stdout]    |
[INFO] [stdout] 45 | impl LogAggregator {
[INFO] [stdout]    | ------------------ associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 54 |     pub fn with_log_dir(log_dir: String) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 63 |     fn new_job_state(&self) -> JobLogState {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]   --> crates/ci-controller/src/monitoring.rs:45:12
[INFO] [stdout]    |
[INFO] [stdout] 27 | impl Metrics {
[INFO] [stdout]    | ------------ methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 45 |     pub fn inc_jobs_submitted(&self) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 49 |     pub fn inc_jobs_completed(&self) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 53 |     pub fn inc_jobs_failed(&self) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 57 |     pub fn inc_jobs_cancelled(&self) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 61 |     pub fn inc_stages_submitted(&self) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 65 |     pub fn inc_worker_reservations(&self) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 69 |     pub fn inc_stage_failures(&self) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 75 |     pub fn inc_active_builds(&self) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 79 |     pub fn dec_active_builds(&self) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 83 |     pub fn inc_active_stages(&self) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 87 |     pub fn dec_active_stages(&self) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Monitoring` is never constructed
[INFO] [stdout]    --> crates/ci-controller/src/monitoring.rs:150:12
[INFO] [stdout]     |
[INFO] [stdout] 150 | pub struct Monitoring;
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `record_worker_metrics`, and `job_stats` are never used
[INFO] [stdout]    --> crates/ci-controller/src/monitoring.rs:153:12
[INFO] [stdout]     |
[INFO] [stdout] 152 | impl Monitoring {
[INFO] [stdout]     | --------------- associated items in this implementation
[INFO] [stdout] 153 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 158 |     pub async fn record_worker_metrics(&self, worker_id: &str, load: f64) {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 163 |     pub async fn job_stats(&self) -> anyhow::Result<JobStats> {
[INFO] [stdout]     |                  ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `JobStats` is never constructed
[INFO] [stdout]    --> crates/ci-controller/src/monitoring.rs:174:12
[INFO] [stdout]     |
[INFO] [stdout] 174 | pub struct JobStats {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `WorkerPresence` is never constructed
[INFO] [stdout]  --> crates/ci-controller/src/redis_store.rs:9:12
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub struct WorkerPresence {
[INFO] [stdout]   |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `JobGroupCache` is never constructed
[INFO] [stdout]   --> crates/ci-controller/src/redis_store.rs:19:12
[INFO] [stdout]    |
[INFO] [stdout] 19 | pub struct JobGroupCache {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `RedisStore` is never constructed
[INFO] [stdout]   --> crates/ci-controller/src/redis_store.rs:26:12
[INFO] [stdout]    |
[INFO] [stdout] 26 | pub struct RedisStore {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> crates/ci-controller/src/redis_store.rs:32:18
[INFO] [stdout]     |
[INFO] [stdout]  31 | impl RedisStore {
[INFO] [stdout]     | --------------- associated items in this implementation
[INFO] [stdout]  32 |     pub async fn new(redis_url: &str, prefix: &str) -> anyhow::Result<Self> {
[INFO] [stdout]     |                  ^^^
[INFO] [stdout] ...
[INFO] [stdout]  47 |     async fn get_conn(&self) -> anyhow::Result<Connection> {
[INFO] [stdout]     |              ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  51 |     fn key(&self, parts: &[&str]) -> String {
[INFO] [stdout]     |        ^^^
[INFO] [stdout] ...
[INFO] [stdout]  58 |     pub async fn reserve_worker(
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  85 |     pub async fn release_worker(&self, worker_id: &str) -> anyhow::Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  94 |     pub async fn get_worker_reservation(&self, worker_id: &str) -> anyhow::Result<Option<String>> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 104 |     pub async fn update_worker_presence(
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 118 |     pub async fn get_worker_presence(
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 132 |     pub async fn remove_worker_presence(&self, worker_id: &str) -> anyhow::Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 142 |     pub async fn add_available_worker(&self, worker_id: &str) -> anyhow::Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 150 |     pub async fn remove_available_worker(&self, worker_id: &str) -> anyhow::Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 158 |     pub async fn get_available_workers(&self) -> anyhow::Result<Vec<String>> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 168 |     pub async fn update_job_group_cache(
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 181 |     pub async fn get_job_group_cache(
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 197 |     pub async fn publish_event(&self, group_id: &str, event: &str) -> anyhow::Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 207 |     pub async fn acquire_lock(&self, lock_name: &str, ttl_secs: u64) -> anyhow::Result<bool> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 222 |     pub async fn release_lock(&self, lock_name: &str) -> anyhow::Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 230 |     pub fn prefix(&self) -> &str {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_pubsub_client` is never used
[INFO] [stdout]    --> crates/ci-controller/src/redis_store.rs:239:8
[INFO] [stdout]     |
[INFO] [stdout] 239 | pub fn create_pubsub_client(redis_url: &str) -> anyhow::Result<redis::Client> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_worker_death_key` is never used
[INFO] [stdout]    --> crates/ci-controller/src/redis_store.rs:246:8
[INFO] [stdout]     |
[INFO] [stdout] 246 | pub fn parse_worker_death_key(key: &str, prefix: &str) -> Option<String> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `subscribe_worker_deaths` is never used
[INFO] [stdout]    --> crates/ci-controller/src/redis_store.rs:260:14
[INFO] [stdout]     |
[INFO] [stdout] 260 | pub async fn subscribe_worker_deaths(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ReservationManager` is never constructed
[INFO] [stdout]  --> crates/ci-controller/src/reservation.rs:7:12
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub struct ReservationManager;
[INFO] [stdout]   |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `reserve` and `release` are never used
[INFO] [stdout]   --> crates/ci-controller/src/reservation.rs:11:18
[INFO] [stdout]    |
[INFO] [stdout]  9 | impl ReservationManager {
[INFO] [stdout]    | ----------------------- associated functions in this implementation
[INFO] [stdout] 10 |     /// Attempt to reserve a worker for a job group
[INFO] [stdout] 11 |     pub async fn reserve(
[INFO] [stdout]    |                  ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 30 |     pub async fn release(redis: &RedisStore, worker_id: &str) -> anyhow::Result<()> {
[INFO] [stdout]    |                  ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `RoundRobinScheduler` is never constructed
[INFO] [stdout]    --> crates/ci-controller/src/scheduler.rs:123:12
[INFO] [stdout]     |
[INFO] [stdout] 123 | pub struct RoundRobinScheduler {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]    --> crates/ci-controller/src/scheduler.rs:128:12
[INFO] [stdout]     |
[INFO] [stdout] 127 | impl RoundRobinScheduler {
[INFO] [stdout]     | ------------------------ associated function in this implementation
[INFO] [stdout] 128 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `REPO_COLUMNS` is never used
[INFO] [stdout]   --> crates/ci-controller/src/storage.rs:14:7
[INFO] [stdout]    |
[INFO] [stdout] 14 | const REPO_COLUMNS: &str =
[INFO] [stdout]    |       ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `STAGE_CONFIG_COLUMNS` is never used
[INFO] [stdout]   --> crates/ci-controller/src/storage.rs:17:7
[INFO] [stdout]    |
[INFO] [stdout] 17 | const STAGE_CONFIG_COLUMNS: &str =
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `STAGE_SCRIPT_COLUMNS` is never used
[INFO] [stdout]   --> crates/ci-controller/src/storage.rs:22:7
[INFO] [stdout]    |
[INFO] [stdout] 22 | const STAGE_SCRIPT_COLUMNS: &str =
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `JOB_GROUP_COLUMNS` is never used
[INFO] [stdout]   --> crates/ci-controller/src/storage.rs:26:7
[INFO] [stdout]    |
[INFO] [stdout] 26 | const JOB_GROUP_COLUMNS: &str =
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `JOB_COLUMNS` is never used
[INFO] [stdout]   --> crates/ci-controller/src/storage.rs:30:7
[INFO] [stdout]    |
[INFO] [stdout] 30 | const JOB_COLUMNS: &str = "id, job_group_id, stage_config_id, stage_name, command, pre_script, \
[INFO] [stdout]    |       ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `WORKER_COLUMNS` is never used
[INFO] [stdout]   --> crates/ci-controller/src/storage.rs:34:7
[INFO] [stdout]    |
[INFO] [stdout] 34 | const WORKER_COLUMNS: &str =
[INFO] [stdout]    |       ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `RESERVATION_COLUMNS` is never used
[INFO] [stdout]   --> crates/ci-controller/src/storage.rs:38:7
[INFO] [stdout]    |
[INFO] [stdout] 38 | const RESERVATION_COLUMNS: &str =
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `map_repo` is never used
[INFO] [stdout]   --> crates/ci-controller/src/storage.rs:45:4
[INFO] [stdout]    |
[INFO] [stdout] 45 | fn map_repo(r: sqlx::postgres::PgRow) -> Repo {
[INFO] [stdout]    |    ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `map_stage_config` is never used
[INFO] [stdout]   --> crates/ci-controller/src/storage.rs:57:4
[INFO] [stdout]    |
[INFO] [stdout] 57 | fn map_stage_config(r: sqlx::postgres::PgRow) -> StageConfig {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `map_stage_script` is never used
[INFO] [stdout]   --> crates/ci-controller/src/storage.rs:76:4
[INFO] [stdout]    |
[INFO] [stdout] 76 | fn map_stage_script(r: sqlx::postgres::PgRow) -> StageScript {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `map_reservation` is never used
[INFO] [stdout]   --> crates/ci-controller/src/storage.rs:89:4
[INFO] [stdout]    |
[INFO] [stdout] 89 | fn map_reservation(r: sqlx::postgres::PgRow) -> WorkerReservation {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `map_job_group` is never used
[INFO] [stdout]    --> crates/ci-controller/src/storage.rs:101:4
[INFO] [stdout]     |
[INFO] [stdout] 101 | fn map_job_group(r: sqlx::postgres::PgRow) -> JobGroup {
[INFO] [stdout]     |    ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Storage` is never constructed
[INFO] [stdout]    --> crates/ci-controller/src/storage.rs:164:12
[INFO] [stdout]     |
[INFO] [stdout] 164 | pub struct Storage {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `WorkerRow` is never constructed
[INFO] [stdout]    --> crates/ci-controller/src/storage.rs:170:12
[INFO] [stdout]     |
[INFO] [stdout] 170 | pub struct WorkerRow {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `DbJob` is never constructed
[INFO] [stdout]    --> crates/ci-controller/src/storage.rs:186:12
[INFO] [stdout]     |
[INFO] [stdout] 186 | pub struct DbJob {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> crates/ci-controller/src/storage.rs:208:18
[INFO] [stdout]     |
[INFO] [stdout] 206 | impl Storage {
[INFO] [stdout]     | ------------ associated items in this implementation
[INFO] [stdout] 207 |     /// Create a new Storage with a connection pool
[INFO] [stdout] 208 |     pub async fn new(database_url: &str, max_connections: u32) -> anyhow::Result<Self> {
[INFO] [stdout]     |                  ^^^
[INFO] [stdout] ...
[INFO] [stdout] 219 |     pub async fn migrate(&self) -> anyhow::Result<()> {
[INFO] [stdout]     |                  ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 239 |     pub fn pool(&self) -> &PgPool {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 247 |     pub async fn get_repo_by_name(&self, repo_name: &str) -> anyhow::Result<Option<Repo>> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 257 |     pub async fn create_repo(
[INFO] [stdout]     |                  ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 278 |     pub async fn list_repos(&self) -> anyhow::Result<Vec<Repo>> {
[INFO] [stdout]     |                  ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 289 |     pub async fn get_stage_configs_for_repo(
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 302 |     pub async fn get_stage_config(&self, id: Uuid) -> anyhow::Result<Option<StageConfig>> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 315 |     pub async fn get_scripts_for_stage(
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 364 |     pub async fn create_job_group(&self, group: &JobGroup) -> anyhow::Result<JobGroup> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 387 |     pub async fn update_job_group_state(
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 412 |     pub async fn get_job_group(&self, id: Uuid) -> anyhow::Result<Option<JobGroup>> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 423 |     pub async fn create_job(&self, job: &DbJob) -> anyhow::Result<DbJob> {
[INFO] [stdout]     |                  ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 448 |     pub async fn update_job_state(
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 494 |     pub async fn get_jobs_for_group(&self, job_group_id: Uuid) -> anyhow::Result<Vec<DbJob>> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 507 |     pub async fn get_job(&self, id: Uuid) -> anyhow::Result<Option<DbJob>> {
[INFO] [stdout]     |                  ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 518 |     pub async fn create_reservation(
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 539 |     pub async fn release_reservation(
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 563 |     pub async fn get_active_reservation_for_worker(
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 584 |     pub async fn upsert_worker(&self, worker: &WorkerRow) -> anyhow::Result<WorkerRow> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 618 |     pub async fn update_worker_status(
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 637 |     pub async fn get_worker(&self, worker_id: &str) -> anyhow::Result<Option<WorkerRow>> {
[INFO] [stdout]     |                  ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 647 |     pub async fn list_workers(&self) -> anyhow::Result<Vec<WorkerRow>> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `mark_disconnected` and `is_draining` are never used
[INFO] [stdout]    --> crates/ci-controller/src/worker_registry.rs:67:12
[INFO] [stdout]     |
[INFO] [stdout]  12 | impl WorkerRegistry {
[INFO] [stdout]     | ------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  67 |     pub fn mark_disconnected(&mut self, worker_id: &str) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 102 |     pub fn is_draining(&self, worker_id: &str) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 15.87s
[INFO] running `Command { std: "docker" "inspect" "bf2c9262f6a129ff9a55a1163e03878b212b1a4f583f7cbcc5bd12515f99e523", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "bf2c9262f6a129ff9a55a1163e03878b212b1a4f583f7cbcc5bd12515f99e523", kill_on_drop: false }`
[INFO] [stdout] bf2c9262f6a129ff9a55a1163e03878b212b1a4f583f7cbcc5bd12515f99e523
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+1f7f8ea0721a3b1eb73e6c6d25cccb371434b320" "test" "--frozen", kill_on_drop: false }`
[INFO] [stdout] c1ad8b060444ce56353486afa8e7b75beaecb0a523ee81c3bedd6d6a2362f2a5
[INFO] running `Command { std: "docker" "start" "-a" "c1ad8b060444ce56353486afa8e7b75beaecb0a523ee81c3bedd6d6a2362f2a5", kill_on_drop: false }`
[INFO] [stderr] warning: unused import: `JobStatusAck`
[INFO] [stderr]  --> crates/ci-worker/src/agent.rs:8:15
[INFO] [stderr]   |
[INFO] [stderr] 8 |     JobState, JobStatusAck, JobStatusUpdate, ReconnectRequest, RegisterRequest, RunningJobInfo,
[INFO] [stderr]   |               ^^^^^^^^^^^^
[INFO] [stderr]   |
[INFO] [stderr]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: value assigned to `command_exit_code` is never read
[INFO] [stderr]   --> crates/ci-worker/src/stage_runner.rs:59:42
[INFO] [stderr]    |
[INFO] [stderr] 59 |         let mut command_exit_code: i32 = -1;
[INFO] [stderr]    |                                          ^^
[INFO] [stderr]    |
[INFO] [stderr]    = help: maybe it is overwritten before being read?
[INFO] [stderr]    = note: `#[warn(unused_assignments)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: value assigned to `post_exit_code` is never read
[INFO] [stderr]   --> crates/ci-worker/src/stage_runner.rs:60:47
[INFO] [stderr]    |
[INFO] [stderr] 60 |         let mut post_exit_code: Option<i32> = None;
[INFO] [stderr]    |                                               ^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = help: maybe it is overwritten before being read?
[INFO] [stderr] 
[INFO] [stderr] warning: field `is_stderr` is never read
[INFO] [stderr]    --> crates/ci-worker/src/executor.rs:171:9
[INFO] [stderr]     |
[INFO] [stderr] 169 | pub struct LogLine {
[INFO] [stderr]     |            ------- field in this struct
[INFO] [stderr] 170 |     pub line: String,
[INFO] [stderr] 171 |     pub is_stderr: bool,
[INFO] [stderr]     |         ^^^^^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = note: `LogLine` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr]     = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: field `output` is never read
[INFO] [stderr]    --> crates/ci-worker/src/executor.rs:178:9
[INFO] [stderr]     |
[INFO] [stderr] 176 | pub struct ExecutionResult {
[INFO] [stderr]     |            --------------- field in this struct
[INFO] [stderr] 177 |     pub exit_code: i32,
[INFO] [stderr] 178 |     pub output: String,
[INFO] [stderr]     |         ^^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = note: `ExecutionResult` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: field `pid` is never read
[INFO] [stderr]    --> crates/ci-worker/src/executor.rs:184:5
[INFO] [stderr]     |
[INFO] [stderr] 182 | pub struct RunningJob {
[INFO] [stderr]     |            ---------- field in this struct
[INFO] [stderr] 183 |     /// Process ID (negative for process group)
[INFO] [stderr] 184 |     pid: i32,
[INFO] [stderr]     |     ^^^
[INFO] [stderr] 
[INFO] [stderr] warning: method `execute` is never used
[INFO] [stderr]    --> crates/ci-worker/src/executor.rs:199:18
[INFO] [stderr]     |
[INFO] [stderr] 192 | impl Executor {
[INFO] [stderr]     | ------------- method in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 199 |     pub async fn execute(&self, command: &str, work_dir: &str) -> anyhow::Result<ExecutionResult> {
[INFO] [stderr]     |                  ^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `HeartbeatSender` is never constructed
[INFO] [stderr]  --> crates/ci-worker/src/heartbeat.rs:2:12
[INFO] [stderr]   |
[INFO] [stderr] 2 | pub struct HeartbeatSender;
[INFO] [stderr]   |            ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated function `new` is never used
[INFO] [stderr]  --> crates/ci-worker/src/heartbeat.rs:5:12
[INFO] [stderr]   |
[INFO] [stderr] 4 | impl HeartbeatSender {
[INFO] [stderr]   | -------------------- associated function in this implementation
[INFO] [stderr] 5 |     pub fn new() -> Self {
[INFO] [stderr]   |            ^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated function `with_config` is never used
[INFO] [stderr]   --> crates/ci-worker/src/log_streamer.rs:42:12
[INFO] [stderr]    |
[INFO] [stderr] 35 | impl LogStreamer {
[INFO] [stderr]    | ---------------- associated function in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 42 |     pub fn with_config(config: LogStreamerConfig) -> Self {
[INFO] [stderr]    |            ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: methods `job_state` and `update_job_offset` are never used
[INFO] [stderr]    --> crates/ci-worker/src/reconnect.rs:73:12
[INFO] [stderr]     |
[INFO] [stderr]  60 | impl ReconnectHandler {
[INFO] [stderr]     | --------------------- methods in this implementation
[INFO] [stderr] ...
[INFO] [stderr]  73 |     pub fn job_state(&self) -> std::sync::Arc<tokio::sync::RwLock<WorkerJobState>> {
[INFO] [stderr]     |            ^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 101 |     pub async fn update_job_offset(&self, job_id: &str, log_offset: u64) {
[INFO] [stderr]     |                  ^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `should_migrate_stage` is never used
[INFO] [stderr]    --> crates/ci-worker/src/reconnect.rs:224:8
[INFO] [stderr]     |
[INFO] [stderr] 224 | pub fn should_migrate_stage(allow_worker_migration: bool, stage_completed: bool) -> bool {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: `ci-worker` (bin "ci-worker" test) generated 12 warnings (run `cargo fix --bin "ci-worker" -p ci-worker --tests` to apply 1 suggestion)
[INFO] [stderr] warning: multiple methods are never used
[INFO] [stderr]    --> crates/ci-controller/src/job_group_registry.rs:35:12
[INFO] [stderr]     |
[INFO] [stderr]  17 | impl JobGroupRegistry {
[INFO] [stderr]     | --------------------- methods in this implementation
[INFO] [stderr] ...
[INFO] [stderr]  35 |     pub fn get_mut(&mut self, group_id: &Uuid) -> Option<&mut JobGroup> {
[INFO] [stderr]     |            ^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  65 |     pub fn get_job_mut_in_group(&mut self, group_id: &Uuid, job_id: &str) -> Option<&mut Job> {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  73 |     pub fn check_group_completion(&mut self, group_id: &Uuid) -> Option<JobGroupState> {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 113 |     pub fn get_groups_for_worker(&self, worker_id: &str) -> Vec<&JobGroup> {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 130 |     pub fn handle_worker_death(&self, worker_id: &str) -> (Vec<Uuid>, Vec<Uuid>) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 168 |     pub fn migrate_group(&mut self, group_id: &Uuid, new_worker_id: &str) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 190 |     pub fn fail_group_jobs(&mut self, group_id: &Uuid, reason: &str) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 217 |     pub fn on_group_completed(&self, group_id: &Uuid) -> Option<String> {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 234 |     pub fn get_parallel_stages(&self, group_id: &Uuid) -> Vec<Vec<String>> {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: method `get_orphaned_jobs` is never used
[INFO] [stderr]    --> crates/ci-controller/src/job_registry.rs:115:12
[INFO] [stderr]     |
[INFO] [stderr]  12 | impl JobRegistry {
[INFO] [stderr]     | ---------------- method in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 115 |     pub fn get_orphaned_jobs(&self, connection_id: &str) -> Vec<&Job> {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated items `with_log_dir` and `new_job_state` are never used
[INFO] [stderr]   --> crates/ci-controller/src/log_aggregator.rs:54:12
[INFO] [stderr]    |
[INFO] [stderr] 45 | impl LogAggregator {
[INFO] [stderr]    | ------------------ associated items in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 54 |     pub fn with_log_dir(log_dir: String) -> Self {
[INFO] [stderr]    |            ^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 63 |     fn new_job_state(&self) -> JobLogState {
[INFO] [stderr]    |        ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: multiple methods are never used
[INFO] [stderr]   --> crates/ci-controller/src/monitoring.rs:45:12
[INFO] [stderr]    |
[INFO] [stderr] 27 | impl Metrics {
[INFO] [stderr]    | ------------ methods in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 45 |     pub fn inc_jobs_submitted(&self) {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 49 |     pub fn inc_jobs_completed(&self) {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 53 |     pub fn inc_jobs_failed(&self) {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 57 |     pub fn inc_jobs_cancelled(&self) {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 61 |     pub fn inc_stages_submitted(&self) {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 65 |     pub fn inc_worker_reservations(&self) {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 69 |     pub fn inc_stage_failures(&self) {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 75 |     pub fn inc_active_builds(&self) {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 79 |     pub fn dec_active_builds(&self) {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 83 |     pub fn inc_active_stages(&self) {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 87 |     pub fn dec_active_stages(&self) {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `Monitoring` is never constructed
[INFO] [stderr]    --> crates/ci-controller/src/monitoring.rs:150:12
[INFO] [stderr]     |
[INFO] [stderr] 150 | pub struct Monitoring;
[INFO] [stderr]     |            ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated items `new`, `record_worker_metrics`, and `job_stats` are never used
[INFO] [stderr]    --> crates/ci-controller/src/monitoring.rs:153:12
[INFO] [stderr]     |
[INFO] [stderr] 152 | impl Monitoring {
[INFO] [stderr]     | --------------- associated items in this implementation
[INFO] [stderr] 153 |     pub fn new() -> Self {
[INFO] [stderr]     |            ^^^
[INFO] [stderr] ...
[INFO] [stderr] 158 |     pub async fn record_worker_metrics(&self, worker_id: &str, load: f64) {
[INFO] [stderr]     |                  ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 163 |     pub async fn job_stats(&self) -> anyhow::Result<JobStats> {
[INFO] [stderr]     |                  ^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `JobStats` is never constructed
[INFO] [stderr]    --> crates/ci-controller/src/monitoring.rs:174:12
[INFO] [stderr]     |
[INFO] [stderr] 174 | pub struct JobStats {
[INFO] [stderr]     |            ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `WorkerPresence` is never constructed
[INFO] [stderr]  --> crates/ci-controller/src/redis_store.rs:9:12
[INFO] [stderr]   |
[INFO] [stderr] 9 | pub struct WorkerPresence {
[INFO] [stderr]   |            ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `JobGroupCache` is never constructed
[INFO] [stderr]   --> crates/ci-controller/src/redis_store.rs:19:12
[INFO] [stderr]    |
[INFO] [stderr] 19 | pub struct JobGroupCache {
[INFO] [stderr]    |            ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `RedisStore` is never constructed
[INFO] [stderr]   --> crates/ci-controller/src/redis_store.rs:26:12
[INFO] [stderr]    |
[INFO] [stderr] 26 | pub struct RedisStore {
[INFO] [stderr]    |            ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: multiple associated items are never used
[INFO] [stderr]    --> crates/ci-controller/src/redis_store.rs:32:18
[INFO] [stderr]     |
[INFO] [stderr]  31 | impl RedisStore {
[INFO] [stderr]     | --------------- associated items in this implementation
[INFO] [stderr]  32 |     pub async fn new(redis_url: &str, prefix: &str) -> anyhow::Result<Self> {
[INFO] [stderr]     |                  ^^^
[INFO] [stderr] ...
[INFO] [stderr]  47 |     async fn get_conn(&self) -> anyhow::Result<Connection> {
[INFO] [stderr]     |              ^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  51 |     fn key(&self, parts: &[&str]) -> String {
[INFO] [stderr]     |        ^^^
[INFO] [stderr] ...
[INFO] [stderr]  58 |     pub async fn reserve_worker(
[INFO] [stderr]     |                  ^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  85 |     pub async fn release_worker(&self, worker_id: &str) -> anyhow::Result<()> {
[INFO] [stderr]     |                  ^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  94 |     pub async fn get_worker_reservation(&self, worker_id: &str) -> anyhow::Result<Option<String>> {
[INFO] [stderr]     |                  ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 104 |     pub async fn update_worker_presence(
[INFO] [stderr]     |                  ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 118 |     pub async fn get_worker_presence(
[INFO] [stderr]     |                  ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 132 |     pub async fn remove_worker_presence(&self, worker_id: &str) -> anyhow::Result<()> {
[INFO] [stderr]     |                  ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 142 |     pub async fn add_available_worker(&self, worker_id: &str) -> anyhow::Result<()> {
[INFO] [stderr]     |                  ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 150 |     pub async fn remove_available_worker(&self, worker_id: &str) -> anyhow::Result<()> {
[INFO] [stderr]     |                  ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 158 |     pub async fn get_available_workers(&self) -> anyhow::Result<Vec<String>> {
[INFO] [stderr]     |                  ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 168 |     pub async fn update_job_group_cache(
[INFO] [stderr]     |                  ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 181 |     pub async fn get_job_group_cache(
[INFO] [stderr]     |                  ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 197 |     pub async fn publish_event(&self, group_id: &str, event: &str) -> anyhow::Result<()> {
[INFO] [stderr]     |                  ^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 207 |     pub async fn acquire_lock(&self, lock_name: &str, ttl_secs: u64) -> anyhow::Result<bool> {
[INFO] [stderr]     |                  ^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 222 |     pub async fn release_lock(&self, lock_name: &str) -> anyhow::Result<()> {
[INFO] [stderr]     |                  ^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 230 |     pub fn prefix(&self) -> &str {
[INFO] [stderr]     |            ^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `create_pubsub_client` is never used
[INFO] [stderr]    --> crates/ci-controller/src/redis_store.rs:239:8
[INFO] [stderr]     |
[INFO] [stderr] 239 | pub fn create_pubsub_client(redis_url: &str) -> anyhow::Result<redis::Client> {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `parse_worker_death_key` is never used
[INFO] [stderr]    --> crates/ci-controller/src/redis_store.rs:246:8
[INFO] [stderr]     |
[INFO] [stderr] 246 | pub fn parse_worker_death_key(key: &str, prefix: &str) -> Option<String> {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `subscribe_worker_deaths` is never used
[INFO] [stderr]    --> crates/ci-controller/src/redis_store.rs:260:14
[INFO] [stderr]     |
[INFO] [stderr] 260 | pub async fn subscribe_worker_deaths(
[INFO] [stderr]     |              ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `ReservationManager` is never constructed
[INFO] [stderr]  --> crates/ci-controller/src/reservation.rs:7:12
[INFO] [stderr]   |
[INFO] [stderr] 7 | pub struct ReservationManager;
[INFO] [stderr]   |            ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated functions `reserve` and `release` are never used
[INFO] [stderr]   --> crates/ci-controller/src/reservation.rs:11:18
[INFO] [stderr]    |
[INFO] [stderr]  9 | impl ReservationManager {
[INFO] [stderr]    | ----------------------- associated functions in this implementation
[INFO] [stderr] 10 |     /// Attempt to reserve a worker for a job group
[INFO] [stderr] 11 |     pub async fn reserve(
[INFO] [stderr]    |                  ^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 30 |     pub async fn release(redis: &RedisStore, worker_id: &str) -> anyhow::Result<()> {
[INFO] [stderr]    |                  ^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `RoundRobinScheduler` is never constructed
[INFO] [stderr]    --> crates/ci-controller/src/scheduler.rs:123:12
[INFO] [stderr]     |
[INFO] [stderr] 123 | pub struct RoundRobinScheduler {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated function `new` is never used
[INFO] [stderr]    --> crates/ci-controller/src/scheduler.rs:128:12
[INFO] [stderr]     |
[INFO] [stderr] 127 | impl RoundRobinScheduler {
[INFO] [stderr]     | ------------------------ associated function in this implementation
[INFO] [stderr] 128 |     pub fn new() -> Self {
[INFO] [stderr]     |            ^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `REPO_COLUMNS` is never used
[INFO] [stderr]   --> crates/ci-controller/src/storage.rs:14:7
[INFO] [stderr]    |
[INFO] [stderr] 14 | const REPO_COLUMNS: &str =
[INFO] [stderr]    |       ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `STAGE_CONFIG_COLUMNS` is never used
[INFO] [stderr]   --> crates/ci-controller/src/storage.rs:17:7
[INFO] [stderr]    |
[INFO] [stderr] 17 | const STAGE_CONFIG_COLUMNS: &str =
[INFO] [stderr]    |       ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `STAGE_SCRIPT_COLUMNS` is never used
[INFO] [stderr]   --> crates/ci-controller/src/storage.rs:22:7
[INFO] [stderr]    |
[INFO] [stderr] 22 | const STAGE_SCRIPT_COLUMNS: &str =
[INFO] [stderr]    |       ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `JOB_GROUP_COLUMNS` is never used
[INFO] [stderr]   --> crates/ci-controller/src/storage.rs:26:7
[INFO] [stderr]    |
[INFO] [stderr] 26 | const JOB_GROUP_COLUMNS: &str =
[INFO] [stderr]    |       ^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `JOB_COLUMNS` is never used
[INFO] [stderr]   --> crates/ci-controller/src/storage.rs:30:7
[INFO] [stderr]    |
[INFO] [stderr] 30 | const JOB_COLUMNS: &str = "id, job_group_id, stage_config_id, stage_name, command, pre_script, \
[INFO] [stderr]    |       ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `WORKER_COLUMNS` is never used
[INFO] [stderr]   --> crates/ci-controller/src/storage.rs:34:7
[INFO] [stderr]    |
[INFO] [stderr] 34 | const WORKER_COLUMNS: &str =
[INFO] [stderr]    |       ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `RESERVATION_COLUMNS` is never used
[INFO] [stderr]   --> crates/ci-controller/src/storage.rs:38:7
[INFO] [stderr]    |
[INFO] [stderr] 38 | const RESERVATION_COLUMNS: &str =
[INFO] [stderr]    |       ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `map_repo` is never used
[INFO] [stderr]   --> crates/ci-controller/src/storage.rs:45:4
[INFO] [stderr]    |
[INFO] [stderr] 45 | fn map_repo(r: sqlx::postgres::PgRow) -> Repo {
[INFO] [stderr]    |    ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `map_stage_config` is never used
[INFO] [stderr]   --> crates/ci-controller/src/storage.rs:57:4
[INFO] [stderr]    |
[INFO] [stderr] 57 | fn map_stage_config(r: sqlx::postgres::PgRow) -> StageConfig {
[INFO] [stderr]    |    ^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `map_stage_script` is never used
[INFO] [stderr]   --> crates/ci-controller/src/storage.rs:76:4
[INFO] [stderr]    |
[INFO] [stderr] 76 | fn map_stage_script(r: sqlx::postgres::PgRow) -> StageScript {
[INFO] [stderr]    |    ^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `map_reservation` is never used
[INFO] [stderr]   --> crates/ci-controller/src/storage.rs:89:4
[INFO] [stderr]    |
[INFO] [stderr] 89 | fn map_reservation(r: sqlx::postgres::PgRow) -> WorkerReservation {
[INFO] [stderr]    |    ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `map_job_group` is never used
[INFO] [stderr]    --> crates/ci-controller/src/storage.rs:101:4
[INFO] [stderr]     |
[INFO] [stderr] 101 | fn map_job_group(r: sqlx::postgres::PgRow) -> JobGroup {
[INFO] [stderr]     |    ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `Storage` is never constructed
[INFO] [stderr]    --> crates/ci-controller/src/storage.rs:164:12
[INFO] [stderr]     |
[INFO] [stderr] 164 | pub struct Storage {
[INFO] [stderr]     |            ^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `WorkerRow` is never constructed
[INFO] [stderr]    --> crates/ci-controller/src/storage.rs:170:12
[INFO] [stderr]     |
[INFO] [stderr] 170 | pub struct WorkerRow {
[INFO] [stderr]     |            ^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `DbJob` is never constructed
[INFO] [stderr]    --> crates/ci-controller/src/storage.rs:186:12
[INFO] [stderr]     |
[INFO] [stderr] 186 | pub struct DbJob {
[INFO] [stderr]     |            ^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: multiple associated items are never used
[INFO] [stderr]    --> crates/ci-controller/src/storage.rs:208:18
[INFO] [stderr]     |
[INFO] [stderr] 206 | impl Storage {
[INFO] [stderr]     | ------------ associated items in this implementation
[INFO] [stderr] 207 |     /// Create a new Storage with a connection pool
[INFO] [stderr] 208 |     pub async fn new(database_url: &str, max_connections: u32) -> anyhow::Result<Self> {
[INFO] [stderr]     |                  ^^^
[INFO] [stderr] ...
[INFO] [stderr] 219 |     pub async fn migrate(&self) -> anyhow::Result<()> {
[INFO] [stderr]     |                  ^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 239 |     pub fn pool(&self) -> &PgPool {
[INFO] [stderr]     |            ^^^^
[INFO] [stderr] ...
[INFO] [stderr] 247 |     pub async fn get_repo_by_name(&self, repo_name: &str) -> anyhow::Result<Option<Repo>> {
[INFO] [stderr]     |                  ^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 257 |     pub async fn create_repo(
[INFO] [stderr]     |                  ^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 278 |     pub async fn list_repos(&self) -> anyhow::Result<Vec<Repo>> {
[INFO] [stderr]     |                  ^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 289 |     pub async fn get_stage_configs_for_repo(
[INFO] [stderr]     |                  ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 302 |     pub async fn get_stage_config(&self, id: Uuid) -> anyhow::Result<Option<StageConfig>> {
[INFO] [stderr]     |                  ^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 315 |     pub async fn get_scripts_for_stage(
[INFO] [stderr]     |                  ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 364 |     pub async fn create_job_group(&self, group: &JobGroup) -> anyhow::Result<JobGroup> {
[INFO] [stderr]     |                  ^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 387 |     pub async fn update_job_group_state(
[INFO] [stderr]     |                  ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 412 |     pub async fn get_job_group(&self, id: Uuid) -> anyhow::Result<Option<JobGroup>> {
[INFO] [stderr]     |                  ^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 423 |     pub async fn create_job(&self, job: &DbJob) -> anyhow::Result<DbJob> {
[INFO] [stderr]     |                  ^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 448 |     pub async fn update_job_state(
[INFO] [stderr]     |                  ^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 494 |     pub async fn get_jobs_for_group(&self, job_group_id: Uuid) -> anyhow::Result<Vec<DbJob>> {
[INFO] [stderr]     |                  ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 507 |     pub async fn get_job(&self, id: Uuid) -> anyhow::Result<Option<DbJob>> {
[INFO] [stderr]     |                  ^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 518 |     pub async fn create_reservation(
[INFO] [stderr]     |                  ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 539 |     pub async fn release_reservation(
[INFO] [stderr]     |                  ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 563 |     pub async fn get_active_reservation_for_worker(
[INFO] [stderr]     |                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 584 |     pub async fn upsert_worker(&self, worker: &WorkerRow) -> anyhow::Result<WorkerRow> {
[INFO] [stderr]     |                  ^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 618 |     pub async fn update_worker_status(
[INFO] [stderr]     |                  ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 637 |     pub async fn get_worker(&self, worker_id: &str) -> anyhow::Result<Option<WorkerRow>> {
[INFO] [stderr]     |                  ^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 647 |     pub async fn list_workers(&self) -> anyhow::Result<Vec<WorkerRow>> {
[INFO] [stderr]     |                  ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: methods `mark_disconnected` and `is_draining` are never used
[INFO] [stderr]    --> crates/ci-controller/src/worker_registry.rs:67:12
[INFO] [stderr]     |
[INFO] [stderr]  12 | impl WorkerRegistry {
[INFO] [stderr]     | ------------------- methods in this implementation
[INFO] [stderr] ...
[INFO] [stderr]  67 |     pub fn mark_disconnected(&mut self, worker_id: &str) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 102 |     pub fn is_draining(&self, worker_id: &str) -> bool {
[INFO] [stderr]     |            ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: `ci-controller` (bin "ci-controller" test) generated 35 warnings
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 0.40s
[INFO] [stderr]      Running unittests src/main.rs (/opt/rustwide/target/debug/deps/ci_controller-fa7c519bcee6602d)
[INFO] [stdout] 
[INFO] [stdout] running 0 tests
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/ci_core-53731c08e40b4f97)
[INFO] [stdout] 
[INFO] [stdout] running 0 tests
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stderr]      Running unittests src/main.rs (/opt/rustwide/target/debug/deps/ci_job_runner-684e4c8718c1efc6)
[INFO] [stdout] 
[INFO] [stdout] running 0 tests
[INFO] [stderr]      Running unittests src/main.rs (/opt/rustwide/target/debug/deps/ci_worker-c56fff3d8c795917)
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 4 tests
[INFO] [stdout] test reconnect::tests::test_reconnect_handler_tracks_jobs ... ok
[INFO] [stdout] test reconnect::tests::test_process_resume_directives ... ok
[INFO] [stdout] test reconnect::tests::test_reconnect_with_backoff ... ok
[INFO] [stdout] test reconnect::tests::test_reconnect_success_after_failures ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 4 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.04s
[INFO] [stdout] 
[INFO] [stderr]    Doc-tests ci_core
[INFO] [stdout] 
[INFO] [stdout] running 0 tests
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] running `Command { std: "docker" "inspect" "c1ad8b060444ce56353486afa8e7b75beaecb0a523ee81c3bedd6d6a2362f2a5", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "c1ad8b060444ce56353486afa8e7b75beaecb0a523ee81c3bedd6d6a2362f2a5", kill_on_drop: false }`
[INFO] [stdout] c1ad8b060444ce56353486afa8e7b75beaecb0a523ee81c3bedd6d6a2362f2a5
